#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame
from pygame.locals import *

class clase:					# Carga una partida guardada
	def __init__(self,main):
		self.select = False
		self.fuente = main["graficos"]["fuente"]["20"]
		self.contador2 = 1
		self.pagina = 0
		self.seleccion = 0
		
		self.fondo = pygame.image.load('recursos/img/config/fondo.png').convert()	# Recuadro de fondo
		self.fondo_rec = self.fondo.get_rect(center=((main["general"]["resolucion"][0]/2,main["general"]["resolucion"][1]/2)))
		self.fondo.blit(self.fuente.render("Cargar Partida", True, (255,255,255)),(25,25))
		
		self.botonsig1 = main["graficos"]["boton"]["normal"].copy()			# Boton de siguiente pagina
		self.botonsig2 = main["graficos"]["boton"]["seleccionado"].copy()
		self.botonsig3 = main["graficos"]["boton"]["presionado"].copy()
		self.botonsig = self.botonsig1
		self.botonsig_rec = self.botonsig.get_rect(bottomright=(self.fondo_rec.right-25,self.fondo_rec.bottom-25))
		tamano = self.fuente.size("Pagina")
		pos = (self.botonsig_rec.width/2-tamano[0]/2,self.botonsig_rec.height*5/16-tamano[1]/2)
		self.botonsig1.blit(self.fuente.render("Pagina", True, (255,255,255)),pos)
		self.botonsig2.blit(self.fuente.render("Pagina", True, (255,255,255)),pos)
		self.botonsig3.blit(self.fuente.render("Pagina", True, (255,255,255)),pos)
		tamano = self.fuente.size("siguiente")
		pos = (self.botonsig_rec.width/2-tamano[0]/2,self.botonsig_rec.height*11/16-tamano[1]/2)
		self.botonsig1.blit(self.fuente.render("siguiente", True, (255,255,255)),pos)
		self.botonsig2.blit(self.fuente.render("siguiente", True, (255,255,255)),pos)
		self.botonsig3.blit(self.fuente.render("siguiente", True, (255,255,255)),pos)
		
		self.botonant1 = main["graficos"]["boton"]["normal"].copy()			# Boton de anterior pagina
		self.botonant2 = main["graficos"]["boton"]["seleccionado"].copy()
		self.botonant3 = main["graficos"]["boton"]["presionado"].copy()
		self.botonant = self.botonant1
		self.botonant_rec = self.botonant.get_rect(bottomright=(self.fondo_rec.right-200,self.fondo_rec.bottom-25))
		tamano = self.fuente.size("Pagina")
		pos = (self.botonant_rec.width/2-tamano[0]/2,self.botonant_rec.height*5/16-tamano[1]/2)
		self.botonant1.blit(self.fuente.render("Pagina", True, (255,255,255)),pos)
		self.botonant2.blit(self.fuente.render("Pagina", True, (255,255,255)),pos)
		self.botonant3.blit(self.fuente.render("Pagina", True, (255,255,255)),pos)
		tamano = self.fuente.size("anterior")
		pos = (self.botonant_rec.width/2-tamano[0]/2,self.botonant_rec.height*11/16-tamano[1]/2)
		self.botonant1.blit(self.fuente.render("anterior", True, (255,255,255)),pos)
		self.botonant2.blit(self.fuente.render("anterior", True, (255,255,255)),pos)
		self.botonant3.blit(self.fuente.render("anterior", True, (255,255,255)),pos)
		
		self.botonatras1 = main["graficos"]["boton"]["normal"].copy()			# Boton de volver atras
		self.botonatras2 = main["graficos"]["boton"]["seleccionado"].copy()
		self.botonatras3 = main["graficos"]["boton"]["presionado"].copy()
		self.botonatras = self.botonatras1
		self.botonatras_rec = self.botonatras.get_rect(bottomleft=(self.fondo_rec.left+25,self.fondo_rec.bottom-25))
		tamano = self.fuente.size("Atras")
		pos = (self.botonatras_rec.width/2-tamano[0]/2,self.botonatras_rec.height/2-tamano[1]/2)
		self.botonatras1.blit(self.fuente.render("Atras", True, (255,255,255)),pos)
		self.botonatras2.blit(self.fuente.render("Atras", True, (255,255,255)),pos)
		self.botonatras3.blit(self.fuente.render("Atras", True, (255,255,255)),pos)
		
		self.boton1 = main["graficos"]["boton"]["normal"].copy()			# Botones con las partidas guardadas
		self.boton2 = main["graficos"]["boton"]["seleccionado"].copy()
		self.boton_no = pygame.image.load('recursos/img/config/boton_no.png').convert()	# Imagen para cuando no hay partidas
		
		saves = {}						# Carga todas las partidas que haya en la carpeta save
		loop = True
		save_num = 0
		while loop:
			if save_num < 10:
				save_nombre = "save/save0"+str(save_num)+".sav"
			else:
				save_nombre = "save/save"+str(save_num)+".sav"
			try:
				save_sav = open(save_nombre, "r")
				lineas = save_sav.readlines()
				save_sav.close()
				saves[save_num] = {}
				for linea in lineas:
					linea = linea.split("=")
					if linea[1]:
						try:
							saves[save_num][linea[0]] = int(linea[1])
						except:
							
							saves[save_num][linea[0]] = linea[1].replace("\n","")
				save_num += 1
			except:
				loop = False
		
		self.saves = saves
		self.botones = []	# Boton para cada save
		
		for save in self.saves:			# Crea un boton para cada save y le imprime el nombre y lvl
			boton = [None,None,None]
			boton[1] = self.boton1.copy()
			boton[2] = self.boton2.copy()
			texto = "Lvl "+str(self.saves[save]["lvl"])
			boton[1].blit(self.fuente.render(self.saves[save]["nombre"], True, (255,255,255)),(5,5))
			boton[1].blit(self.fuente.render(texto, True, (255,255,255)),(5,30))
			boton[2].blit(self.fuente.render(self.saves[save]["nombre"], True, (255,255,255)),(5,5))
			boton[2].blit(self.fuente.render(texto, True, (255,255,255)),(5,30))
			boton[0] = boton[1]
			self.botones.append(boton)
				
		self.rects = [None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None]	# Posicion de cada uno de los 20
		self.rects[0] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-270,self.fondo_rec.bottom-450))		# botones que hay en cada pagina
		self.rects[1] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-270,self.fondo_rec.bottom-375))
		self.rects[2] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-270,self.fondo_rec.bottom-300))
		self.rects[3] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-270,self.fondo_rec.bottom-225))
		self.rects[4] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-270,self.fondo_rec.bottom-150))
		self.rects[5] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-90,self.fondo_rec.bottom-450))
		self.rects[6] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-90,self.fondo_rec.bottom-375))
		self.rects[7] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-90,self.fondo_rec.bottom-300))
		self.rects[8] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-90,self.fondo_rec.bottom-225))
		self.rects[9] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2-90,self.fondo_rec.bottom-150))
		self.rects[10] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+90,self.fondo_rec.bottom-450))
		self.rects[11] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+90,self.fondo_rec.bottom-375))
		self.rects[12] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+90,self.fondo_rec.bottom-300))
		self.rects[13] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+90,self.fondo_rec.bottom-225))
		self.rects[14] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+90,self.fondo_rec.bottom-150))
		self.rects[15] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+270,self.fondo_rec.bottom-450))
		self.rects[16] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+270,self.fondo_rec.bottom-375))
		self.rects[17] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+270,self.fondo_rec.bottom-300))
		self.rects[18] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+270,self.fondo_rec.bottom-225))
		self.rects[19] = self.boton1.get_rect(center=(main["general"]["resolucion"][0]/2+270,self.fondo_rec.bottom-150))
		
	def seleccionar(self,main):
		pass
	
	def click(self,main):		# Controla si se apreto algun boton
		if self.select:
			if main["general"]["evento"].type == pygame.MOUSEBUTTONDOWN:
				if main["general"]["evento"].button == 1:
					for rect in self.rects:
						if rect.collidepoint(main["general"]["evento"].pos):
							try:
								main["jugador"]["nombre"] = self.saves[self.rects.index(rect)+self.pagina*20]["nombre"]
								main["jugador"]["lvl"] = self.saves[self.rects.index(rect)+self.pagina*20]["lvl"]
								main["jugador"]["exp"] = self.saves[self.rects.index(rect)+self.pagina*20]["exp"]
								main["mapa"]["enable"] = True
								main["ventana"]["borrar"].append("todo")
								main["ventana"]["crear"].append("ui_topright")	
								main["ventana"]["seleccionar"].append("ui_topright")
							except:
								pass
					if self.botonsig_rec.collidepoint(main["general"]["evento"].pos):
						self.pagina += 1
					if self.botonant_rec.collidepoint(main["general"]["evento"].pos):
						if self.pagina > 0:
							self.pagina -= 1
					if self.botonatras_rec.collidepoint(main["general"]["evento"].pos):
						main["ventana"]["borrar"].append("cargar")
						main["ventana"]["seleccionar"].append("login")
	
	def tecla(self,main):		# Controla si se apreto alguna tecla
		if self.select:
			if main["general"]["evento"].type == pygame.KEYDOWN:
				if main["general"]["evento"].key == pygame.K_UP:
					if self.seleccion == 20:
						self.seleccion = 4
					elif self.seleccion == 21:
						self.seleccion = 14
					elif self.seleccion == 22:
						self.seleccion = 19
					elif self.seleccion == 0 or self.seleccion == 5:
						self.seleccion = 20
					elif self.seleccion == 10:
						self.seleccion = 21
					elif self.seleccion == 15:
						self.seleccion = 22
					elif (self.seleccion%5) > 0:
						self.seleccion -= 1
					self.contador1 = 15
				elif main["general"]["evento"].key == pygame.K_DOWN:
					if self.seleccion == 20:
						self.seleccion = 0
					elif self.seleccion == 21:
						self.seleccion = 10
					elif self.seleccion == 22:
						self.seleccion = 15
					elif self.seleccion == 4 or self.seleccion == 9:
						self.seleccion = 20
					elif self.seleccion == 14:
						self.seleccion = 21
					elif self.seleccion == 19:
						self.seleccion = 22
					elif (self.seleccion%5) < 4:
						self.seleccion += 1
					self.contador1 = 15
				elif main["general"]["evento"].key == pygame.K_LEFT:
					if self.seleccion < 5:
						self.seleccion += 15
					elif self.seleccion < 20:
						self.seleccion -= 5
					elif self.seleccion == 20:
						self.seleccion = 22
					elif self.seleccion == 21:
						self.seleccion = 20
					elif self.seleccion == 22:
						self.seleccion = 21
					self.contador1 = 15
				elif main["general"]["evento"].key == pygame.K_RIGHT:
					if self.seleccion < 15:
						self.seleccion += 5
					elif self.seleccion < 20:
						self.seleccion -= 15
					elif self.seleccion == 20:
						self.seleccion = 21
					elif self.seleccion == 21:
						self.seleccion = 22
					elif self.seleccion == 22:
						self.seleccion = 20
						self.contador1 = 15
				elif main["general"]["evento"].key == pygame.K_RETURN:
					if self.seleccion == 21:
						if self.pagina > 0:
							self.pagina -= 1
					elif self.seleccion == 22:
						self.pagina += 1
					elif self.seleccion == 20:
						main["ventana"]["borrar"].append("cargar")
						main["ventana"]["seleccionar"].append("login")
					else:
						try:
							main["jugador"]["nombre"] = self.saves[self.seleccion+self.pagina*20]["nombre"]
							main["jugador"]["lvl"] = self.saves[self.seleccion+self.pagina*20]["lvl"]
							main["jugador"]["exp"] = self.saves[self.seleccion+self.pagina*20]["exp"]
							main["mapa"]["enable"] = True
							main["ventana"]["borrar"].append("todo")
							main["ventana"]["crear"].append("ui_topright")	
							main["ventana"]["seleccionar"].append("ui_topright")
						except:
							pass
				elif main["general"]["evento"].key == pygame.K_ESCAPE:
					main["ventana"]["borrar"].append("cargar")
					main["ventana"]["seleccionar"].append("login")
	
	def proceso(self,main):
		for boton in self.botones:
			if boton:
				boton[0] = boton[1]
		self.botonatras = self.botonatras1		# Cambia las imagenes de los botones segun esten seleccionadas o no
		self.botonsig = self.botonsig1
		self.botonant = self.botonant1
		if self.seleccion < len(self.saves.keys()):
			self.botones[self.seleccion][0] = self.botones[self.seleccion][2]
		elif self.seleccion == 20:
			self.botonatras = self.botonatras2
		elif self.seleccion == 21:
			self.botonant = self.botonant2
		elif self.seleccion == 22:
			self.botonsig = self.botonsig2
		pos = main["ventana"]["pulsar"]["click"]["posicion"]
		for rect in self.rects:
			if rect.collidepoint(pos):
				self.seleccion = self.rects.index(rect)
				try:
					self.botones[self.rects.index(rect)][0] = self.botones[self.rects.index(rect)][2]
				except:
					pass
		if self.botonatras_rec.collidepoint(pos):
			self.botonatras = self.botonatras2
			self.seleccion = 20
		elif self.botonsig_rec.collidepoint(pos):
			self.botonsig = self.botonsig2
			self.seleccion = 22
		elif self.botonant_rec.collidepoint(pos):
			self.botonant = self.botonant2
			self.seleccion = 21
		self.botonpag = pygame.image.load('recursos/img/config/boton_m.png').convert()
		tamano = self.fuente.size("Pagina "+str(self.pagina+1))				# Crea una imagen diciendo el nº de pagina
		self.botonpag_rec = self.botonpag.get_rect(topright=(self.fondo_rec.right-15-tamano[0],self.fondo_rec.top+15))
		pos = (self.botonpag_rec.width-tamano[0],self.botonpag_rec.height-tamano[1])
		self.botonpag.blit(self.fuente.render("Pagina "+str(self.pagina+1), True, (255,255,255)),pos)
	
	def graficar(self,main):
		main["general"]["pantalla"].blit(self.fondo,self.fondo_rec.topleft)			# Imprime todo los botones
		main["general"]["pantalla"].blit(self.botonpag,self.botonpag_rec.topleft)
		main["general"]["pantalla"].blit(self.botonatras,self.botonatras_rec.topleft)
		main["general"]["pantalla"].blit(self.botonant,self.botonant_rec.topleft)
		main["general"]["pantalla"].blit(self.botonsig,self.botonsig_rec.topleft)
		for n in range(20):
			try:
				main["general"]["pantalla"].blit(self.botones[n+self.pagina*20][0],self.rects[n].topleft)
			except:
				if self.seleccion == n:
					self.boton_no.set_alpha(150)
				main["general"]["pantalla"].blit(self.boton_no,self.rects[n].topleft)
				self.boton_no.set_alpha(255)
		
